/** @file log.c */
#include <stdlib.h>
#include <string.h>
#include "log.h"

void log_init(log_t *l)
{
    l->head = NULL;
    return;
}

void node_destroy(node *p)
{
     while (p != NULL) {
        node *next = p->next; // 保存下一个节点的指针
        free(p->cmd);         // 释放当前节点的cmd
        free(p);              // 释放当前节点
        p = next;             // 移动到下一个节点
    }
}

void log_destroy(log_t *l) {  
    log_t *current = l->head; 
    log_t *temp;  
  
    // 循环遍历链表直到末尾  
    while (current != NULL) {  
        temp = current;  // 保存当前节点的指针，以便在销毁后能够移动到下一个节点  
        node_destroy(current);  // 销毁当前节点  
        current = temp->head;  // 移动到下一个节点
    }  
  
    l->head = NULL;  // 清除头指针，表明链表已空  
}


void log_push(log_t *l, const char *item)
{
    node *newNode = (node *)malloc(sizeof(node));
    newNode->cmd = (char *)malloc(sizeof(char) * (strlen(item) + 1));
    strcpy(newNode->cmd, item);
    newNode->next = l->head;
    l->head = newNode;
    return;
}

char *log_search(log_t *l, const char *prefix)
{
    if (!l || !prefix) {
        return NULL;
    }

    log_t *current = l;
    int prefix_len = strlen(prefix); // 计算前缀的长度

    while (current->head)
    {
        if (strncmp(current->head->cmd, prefix, prefix_len) == 0) // 比较前缀
        {
            return current->head->cmd;
        }
        current->head = current->head->next;
    }
    return NULL;
}